package Polymorphism.Polymorphism01;

public class Polymorphism001 {
    /*
    * 多态的前提
    *   有继承/实现关系
    *   有方法重写
    *   有父类引用指向子类对象
    *
    *1、对象多态：
    *   Animal a1 = new Dog();
    *   Animal a2 = new Cat();
    *
    * 好处: 方法的形参定义为父类类型，这个方法就可以
    *
    * 行为多态：
    *       好处： 同一个方法，具有多种同表达形式或形态的能力
    *
    * */
    public static void main(String[] args) {
        Aninal dog = new Dog();
        Aninal cat = new Cat();
        dog.eat();
        cat.eat();

        useAnimal(new Cat());
        useAnimal(new Dog());




    }



    /*
    * Animal a = new Dog();
    * Animal a = new Cat();
    *
    * */
    public static void useAnimal(Aninal a){
        a.eat();

    }
}




abstract class Aninal{
    public abstract void eat();

}

class Dog extends Aninal{

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}

class Cat extends Aninal{

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}




